//package com.jic.market.common.config.aop;
//
//import com.alibaba.fastjson.JSONArray;
//import com.jic.common.redis.RedisClientTemplate;
//import com.jic.market.request.AdminOperate;
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Before;
//import org.aspectj.lang.annotation.Pointcut;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Field;
//import java.util.HashMap;
//import java.util.Map;
//
//@Aspect
//@Component
//public class PermissionIntercept {
//
//    @Autowired
//    private RedisClientTemplate redisClientTemplate;
//
//    @Pointcut("within(com.jic.market.controller.manage..*Controller)")
//    public void checkToken(){
//    }
//    @Before("checkToken()")
//    public void beforeCheckToken(JoinPoint joinPoint){
//        Object[]  args = joinPoint.getArgs();
//        if(null != args && 0 != args.length){
//            Object arg = args[0];
//            Class clazz = arg.getClass();
//            try {
//                //获取AdminOperate类
//                while (!clazz.equals(AdminOperate.class)) {
//                    clazz = clazz.getSuperclass();
//                }
//
//                if(clazz.equals(AdminOperate.class)){
//                    Field tokenField = clazz.getDeclaredField("token");
//                    Field deptIdField = clazz.getDeclaredField("deptId");
//                    Field merchantIdField = clazz.getDeclaredField("merchantId");
//                    Field storeIdField = clazz.getDeclaredField("storeId");
//                    Field operatorField = clazz.getDeclaredField("operator");
//                    Field operateNameField = clazz.getDeclaredField("operateName");
//
//                    tokenField.setAccessible(true);
//                    deptIdField.setAccessible(true);
//                    merchantIdField.setAccessible(true);
//                    storeIdField.setAccessible(true);
//                    operatorField.setAccessible(true);
//                    operateNameField.setAccessible(true);
//
//                    if(null != tokenField.get(arg)){
//                        String token = (String) tokenField.get(arg);
//
//                        // 获取用户id
//                        String userStr = redisClientTemplate.get("H5_LOGIN_TOKEN_" + token);
//                        if (null != userStr && !"".equals(userStr)){
//                            Map<String,Object> userMap = JSONArray.parseObject(userStr, HashMap.class);
//                            Object deptIdValue = userMap.get("deptid");
//                            if(null != deptIdValue){
//                                Long deptId = Long.parseLong(deptIdValue.toString());
//                                if(0 != deptId) deptIdField.set(arg, deptId);
//                            }
//                            Object merchantIdValue = userMap.get("merchantId");
//                            if(null != merchantIdValue){
//                                Long merchantId =  Long.parseLong(merchantIdValue.toString());
//                                if(0 != merchantId) merchantIdField.set(arg, merchantId);
//                            }
//                            Object storeIdValue = userMap.get("storeId");
//                            if(null != storeIdValue){
//                                Long storeId = Long.parseLong(storeIdValue.toString());
//                                if(0 != storeId) storeIdField.set(arg, storeId);
//                            }
//                            Object operatorValue = userMap.get("id");
//                            if(null != operatorValue){
//                                Long operator = Long.parseLong(operatorValue.toString());
//                                if(0 != operator) operatorField.set(arg, operator);
//                            }
//                            Object operatorNameValue = userMap.get("username");
//                            if(null != operatorNameValue){
//                                String operatorName = (String) operatorNameValue;
//                                if(!"".equals(operatorName)) operateNameField.set(arg, operatorName);
//                            }
//                        };
//
//                    }
//                  }
//
//            } catch (NoSuchFieldException e) {
//                e.printStackTrace();
//            } catch (IllegalAccessException e) {
//                e.printStackTrace();
//            } catch (Exception e){
//                e.printStackTrace();
//            }
//        }
//
//    }
//
//}
